﻿using System.Collections.Generic;
using ProjetoSolo.QueroGas.Aplicacao.ServicosExternos;
using ProjetoSolo.QueroGas.Dominio.Entidades;
using ProjetoSolo.QueroGas.Dominio.Repositorios;
using ProjetoSolo.QueroGas.Infraestrutura.PersistenciaAdo;
using ProjetoSolo.QueroGas.Infraestrutura.PersistenciaAdo.Repositorios;
using ProjetoSolo.QueroGas.Infraestrutura.ServicosWeb;
using ProjetoSolo.QueroGas.Infraestrutura.Validacao;

namespace ProjetoSolo.QueroGas.Aplicacao.Servicos
{
    public static class ServicoEndereco
    {
        public static Endereco BuscarPorCep(string cep)
        {
            RegraValidacao.VerificarStringVazia(cep, "O parametro cep é obrigatório");

            IServicoBuscaEndereco servico = new ServicoWebBuscaEndereco();
            Endereco endereco = servico.BuscarPorCep(cep);

            return endereco;
        }

        public static IEnumerable<string> BuscarEstadosDeEmpresasAtivas()
        {
            IEnumerable<string> listaEstados = new List<string>();

            using (IContextoRepositorio contexto = new ContextoAdo("QueroGas"))
            {
                IRepositorioEndereco repositorioEndereco = new RepositorioEndereco(contexto);
                listaEstados = repositorioEndereco.BuscarEstados();
            }
            
            return listaEstados;
        }

        public static IEnumerable<string> BuscarCidadesDeEmpresasAtivas(string estado)
        {
            RegraValidacao.VerificarStringVazia(estado, "O paramtro estado é obrigatório");

            IEnumerable<string> listaCidades = new List<string>();

            using (IContextoRepositorio contexto = new ContextoAdo("QueroGas"))
            {
                IRepositorioEndereco repositorioEndereco = new RepositorioEndereco(contexto);
                listaCidades = repositorioEndereco.BuscarCidadesPorEstado(estado);
            }

            return listaCidades;
        }

        public static IEnumerable<string> BuscarBairrosDeEmpresasAtivas(string estado, string cidade)
        {
            RegraValidacao.VerificarStringVazia(cidade, "O parametro estado é obrigatório");
            RegraValidacao.VerificarStringVazia(cidade, "O parametro cidade é obrigatório");

            IEnumerable<string> listaBairros = new List<string>();

            using (IContextoRepositorio contexto = new ContextoAdo("QueroGas"))
            {
                IRepositorioEndereco repositorioEndereco = new RepositorioEndereco(contexto);
                listaBairros = repositorioEndereco.BuscarBairrosPorEstadoCidade(estado, cidade);
            }

            return listaBairros;
        }

        public static IEnumerable<Endereco> BuscarBairrosECidades()
        {
            using (IContextoRepositorio contexto = new ContextoAdo("QueroGas"))
            {
                IRepositorioEndereco repositorioEndereco = new RepositorioEndereco(contexto);
                return repositorioEndereco.BuscarBairrosECidades();
            }
        }
    }
}